// 对axios进行二次封装

import axios from 'axios'
// 引入 nprogress
import  NProgress  from 'nprogress';
import 'nprogress/nprogress.css'

// axios.create() 创建一个新的和axios有相同功能的一个实例
const service = axios.create({
    // 配置基础路径和超时限制
    baseURL: '/mock',   // 这里的路径需要跟设置mock路径一致
    timeout: 20000,
})

// 添加进度条信息功能  nprogress
// 对axios添加额外的功能或者是给请求头添加额外的信息
// 用到axios的请求拦截器和响应拦截器


// 请求拦截器 
service.interceptors.request.use(
    // 成功回调   config：请求报文 
    (config)=> {
        // 在这里可以添加额外的功能 或者给请求头添加数据
        NProgress.start()  // 开启进度条

        // 需要将请求报文返回  因为需要继续往下走
        return config;
    },  
  // 失败回调 这个失败的回调一般不写
    (error) => {  
        return Promise.reject(error);
    });

// 响应拦截器 
service.interceptors.response.use(
    // response： 响应报文
    (respnose) => {
        NProgress.done()  // 停止进度条
        return respnose.data  // 直接返回响应报文中的数据
    },
    (error)=> {
        NProgress.done()  // 停止进度条
        // 可以统一处理错误
        alert('发送ajax请求失败'+error.message||'未知错误')
        // 统一处理完成后 让这个错误继续处理
        // return Promise.reject(new Error('ajax请求失败'))   // 后面继续处理这个错误 返回失败的promise
        // 也可以不继续处理这个错误 直接终端promise链
        return new Promise(() => {})
    }
);

// 封装好的axios请求暴露
export default service